
/*
  WSFT0371CZ78 3.7寸屏驱动类型 示例程序
  驱动芯片 UC8253  分辨率 416*240
  
  u8g2 字体列表
  https://github.com/olikraus/u8g2/wiki/fntlist12

  u8g2 文泉驿字体支持中文，字体大小从12-16号都有 如：u8g2_font_wqy14_t_gb2312a，其中14即指14号字体，具体可以看u8g2字体列表中查看

*/

// enable or disable GxEPD2_GFX base class
#define ENABLE_GxEPD2_GFX 1

#if ARDUINO >= 100
#include <Arduino.h>
#else
#include <WProgram.h>
#endif

#include <pins_arduino.h>
#include <GxEPD2_BW.h>
#include <GxEPD2_3C.h>
#include "GxEPD2_370C_UC8253.h"
#include <U8g2_for_Adafruit_GFX.h>
#include "image.h"

// u8g2 库使用
U8G2_FOR_ADAFRUIT_GFX u8g2Fonts;

#ifndef EPD2_COLOR
#define EPD2_COLOR  GxEPD2_3C
#endif

#ifndef EPD2_MODE
#define EPD2_MODE   GxEPD2_370C_UC8253
#endif

// 墨水屏类型定义
#if defined(ESP32)
#if defined(CONFIG_IDF_TARGET_ESP32)
// ESP32主控接法： 
//    SS(CS)=5 MOSI(SDA)=23  MISO(不接)=19 SCK=18 DC=17 RST=16 BUSY=19
// YMS152152 1.54寸黑白红三色
EPD2_COLOR<EPD2_MODE, EPD2_MODE::HEIGHT> display(EPD2_MODE(/*CS=5*/ 5, /*DC=*/ 17, /*RST=*/ 16, /*BUSY=*/ 19));
#endif

#if defined(CONFIG_IDF_TARGET_ESP32C3)
// ESP32C3主控接法： 
//    SS(CS)=7 MOSI(SDA)=6  MISO(不接)=5 SCK=4 DC=3 RST=2 BUSY=10
EPD2_COLOR<EPD2_MODE, EPD2_MODE::HEIGHT> display(EPD2_MODE(/*CS=*/ 7, /*DC=*/ 3, /*RST=*/ 2, /*BUSY=*/ 10));
#endif

#if defined(CONFIG_IDF_TARGET_ESP32S3)
// ESP32S3主控接法： 
//    SS(CS)=10 MOSI(SDA)=11  MISO(不接)=13 SCK=12 DC=8 RST=7 BUSY=9 
EPD2_COLOR<EPD2_MODE, EPD2_MODE::HEIGHT> display(EPD2_MODE(/*CS=*/ 10, /*DC=*/ 8, /*RST=*/ 7, /*BUSY=*/ 9));
#endif

#else

// ESP8266 模块接法：
//    SS(CS)=15 MOSI(SDA)=13  MISO=12 SCK(SCLK)=14 DC=4 RST=2 BUSY=5
// ESP8266开发板对应引脚: 
//    CS=D8 SDA=D7 SCK=D5 DC=D2 RST=D4 BUSY=D1
EPD2_COLOR<EPD2_MODE , EPD2_MODE ::HEIGHT> display(EPD2_MODE (/*CS=5*/ 15, /*DC=*/ 4, /*RST=*/ 2, /*BUSY=*/ 5));

#endif



void setup()
{
  Serial.begin(115200);
  Serial.println();

  Serial.println("Ink Test Start ...\n"); 

  // 墨水屏初始化
  display.init(); // default 20ms reset pulse, e.g. for bare panels with DESPI-C02

  // display.init(115200, true, 5, false); // USE THIS for Waveshare boards with "clever" reset circuit, 2ms reset pulse

  // 设置旋转方向
  display.setRotation(3);

  // u8g2库初始化
  u8g2Fonts.begin(display);
  
  // 使用u8g2透明模式（这是默认设置）
  u8g2Fonts.setFontMode(1); 
  // 从左到右（这是默认设置）
  u8g2Fonts.setFontDirection(0); 
  
  // 演示示例
//  display.setPartialWindow(0,0,416,240);
  display.setFullWindow();
  display.firstPage();
  do
  {
    
    char HelloWorld1[] = "Hello World!";
    char HelloWorld2[] = "你好中国";
    // 清屏，以白色填充
    display.fillScreen(GxEPD_WHITE);
    // 设置显示方向 
    u8g2Fonts.setFontDirection(0);

    // 显示图片
    display.drawBitmap(0,0,Bitmap_wmywbyt,416,240,GxEPD_BLACK);

    // 设置字体类型 12号字体
    u8g2Fonts.setFont(u8g2_font_wqy12_t_gb2312a);

    // 设置字体颜色
    u8g2Fonts.setForegroundColor(GxEPD_BLACK);
    // 设置背景色
    u8g2Fonts.setBackgroundColor(GxEPD_WHITE); 
    // 设置开始显示的位置
    u8g2Fonts.setCursor(0, 14);
    // 显示文字内容
    u8g2Fonts.print(HelloWorld1);

    // 设置字体类型 14号字体
    u8g2Fonts.setFont(u8g2_font_wqy14_t_gb2312a);
    // 设置字体颜色 如果是三色屏，设置为红色字体，否则以黑色显示
    u8g2Fonts.setForegroundColor(GxEPD_RED );
    // 设置背景色
    u8g2Fonts.setBackgroundColor(GxEPD_WHITE); 
    // 设置开始显示的位置
    u8g2Fonts.setCursor(0, 30);
    // 显示文字内容
    u8g2Fonts.print(HelloWorld2);


    // 设置字体类型 16号字体
    u8g2Fonts.setFont(u8g2_font_wqy16_t_gb2312a);
    // 设置字体颜色
    u8g2Fonts.setForegroundColor(GxEPD_BLACK);
    // 设置背景色
    u8g2Fonts.setBackgroundColor(GxEPD_WHITE); 
    // 设置开始显示的位置
    u8g2Fonts.setCursor(0, 50);
    // 显示文字内容
    u8g2Fonts.print(HelloWorld2);

  } while (display.nextPage());

  

}

void loop()
{
   // 串口接收
   if(Serial.available()>0)
   {
      int i=0;
      char buff[1024]={0};
      while(Serial.available()>0)
      {
        buff[i++] = Serial.read();
      }

      char *p = strtok(buff, " ");
      if(strcmp(p, "clear")==0)
      {
        display.setFullWindow();
        display.firstPage();
        do
        {
          // 清屏，以白色填充
          display.fillScreen(GxEPD_WHITE);
        } while (display.nextPage());
      }
   }
}
